ПолеСВопросом.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                          ОТДЕЛ ПолеСВопросом;
(*============================================================================* 
 * НАЗНАЧЕНИЕ: вывод вопроса
 *============================================================================*)
ИСПОЛЬЗУЕТ
  Надел,
  Поле,
  Подложка,
  Записка,
  Черта,
  Кнопка,
  Ввод ИЗ "..\Обмен\";
ПОСТ
  (* действия кнопок и состояние поля *)
  сДа-  = 1;
  сНет- = 2;

(******************************************************************************)
ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка);
(* получить и обработать управляющие послания *)
УКАЗ
  ДЛЯ посылка ВИДА
  | Ввод.ОтКлавиш:
      ЕСЛИ посылка.код = 1BH ТО (* Esc *)
        поле.состояние:=Поле.сОтмена;
        посылка.код:=0
      КОН
  | Кнопка.Посылка:
      поле.состояние:=посылка.кнопка.действие
  ИНАЧЕ
  КОН             
КОН Приём;

(******************************************************************************)
ЗАДАЧА Выполнить-(
(* Цель:  осуществить вывод вопроса *)
(******************************************************************************)
(* До: *)   
    заголовок-:ЦЕПЬ;      (* заголовок подложки             *)
    строк:ЦЕЛ;            (* желаемая высота текста         *)
    колонок:ЦЕЛ;          (* желаемая ширина текста         *)
    окружение:Поле.Доступ;(* окружающее поле                *)
    номерСправки:ЦЕЛ;     (* номер справки или 0            *)
    текст-:ЦЕПЬ           (* текст вопроса                  *)
(* Ответ: *)
):ЦЕЛ;                    (* состояние поля после отработки *)
(******************************************************************************)
ПОСТ
  (* цепочки для кнопок *)
  цДа     ="[ ~Да ]";
  цНет    ="[ ~Нет ]";
  цОтмена ="[ Отмена ]";
  длДа    =ДЛИНА(цДа)-1;
  длНет   =ДЛИНА(цНет)-1;
  длОтмена=ДЛИНА(цОтмена);
  промежуток=2; (* промежуток между кнопками *)
  занято  =длДа + промежуток + длНет + промежуток + длОтмена;
ПЕР
  поле:Поле.Доступ;
  подложка:Подложка.Доступ;
  черта:Черта.Доступ;
  записка:Записка.Доступ;
  кнДа,кнНет,кнОтмена:Кнопка.Доступ;
  позДа,позНет,позОтмена:ЦЕЛ;
УКАЗ
  (* вычисление местоположения кнопок *)
  ЕСЛИ занято > колонок ТО
    колонок:=занято
  КОН;
  позДа:=2+((колонок-занято+1) ДЕЛИТЬ 2);
  позНет:=позДа+длДа+промежуток;
  позОтмена:=позНет+длНет+промежуток;
  (* создаём поле *)
  поле:=Поле.Создать(0,0,строк+4,колонок+4,окружение,ВКЛ,Приём);
  (* создаём наделы *)
  подложка:=Подложка.Создать(0,0,0,0,заголовок);
  записка:=Записка.Создать(1,2,-3,-2,текст);
  черта:=Черта.Создать(-3,0,1,0);
  кнДа:=Кнопка.Создать(-2,позДа,цДа,сДа,ВКЛ); 
  кнНет:=Кнопка.Создать(-2,позНет,цНет,сНет,ВКЛ); 
  кнОтмена:=Кнопка.Создать(-2,позОтмена,цОтмена,Поле.сОтмена,ВКЛ); 
  (* заполняем наделы *)
  подложка.цветНадписи[Надел.сОбычный]:=Надел.цПредупреждения;
  подложка.цветБуквицы[Надел.сОбычный]:=Надел.цБуквицыПредупреждения;
  записка.цветНадписи[Надел.сОбычный]:=Надел.цПредупреждения;
  записка.цветБуквицы[Надел.сОбычный]:=Надел.цБуквицыПредупреждения;
  (* добавляем наделы вс порядке отрисовки и получения ввода *)
  Поле.ДобавитьНадел(поле,подложка);
  Поле.ДобавитьНадел(поле,записка);
  Поле.ДобавитьНадел(поле,черта);
  Поле.ДобавитьНадел(поле,кнДа);
  Поле.ДобавитьНадел(поле,кнНет);
  Поле.ДобавитьНадел(поле,кнОтмена);
  (* основная работа *)
  Поле.Рисовать(поле);
  ПОВТОРЯТЬ
    Поле.Проверить(поле)
  ДО поле.состояние # Поле.сРабота;
  (* восстанавливаем окружение *)
  Поле.Рисовать(окружение);
  ВОЗВРАТ поле.состояние
КОН Выполнить;

КОН ПолеСВопросом.

 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы